(function(K) {

K.classLoader().
provides("tk.k90tools.lang.Reflect").
load(function() {
	
	var ARRAY_TOSTRING = '[object Array]';
	var FUNCTION_TOSTRING = '[object Function]';
	var OP = Object.prototype;
	var ADD = ["toString", "valueOf", "hasOwnProperty"];
	var ADD = ["toString", "valueOf"];
	
	var Reflect = {
	
	    isArray : function(o) { 
	        return OP.toString.apply(o) === ARRAY_TOSTRING;
	    },
	
	    isBoolean : function(o) {
	        return typeof o === 'boolean';
	    },
	    
	    isFunction : function(o) {
	        return OP.toString.apply(o) === FUNCTION_TOSTRING;
	    },
	        
	    isNull : function(o) {
	        return o === null;
	    },
	        
	    isNumber : function(o) {
	        return typeof o === 'number' && isFinite(o);
	    },
	      
	    isObject : function(o) {
			return (o && (typeof o === 'object' || Reflect.isFunction(o))) || false;
	    },
	        
	    isString : function(o) {
	        return typeof o === 'string';
	    },
	        
	    isUndefined : function(o) {
	        return typeof o === 'undefined';
	    },
	    
	    isArrayLike : function(o) {
            return ( 
                !!o && !Reflect.isUndefined(o) &&
                !Reflect.isString(o) && 
                !Reflect.isFunction(o) && 
                (Reflect.isArray(o) || isFinite(o.length))
            ) || false;	    	
	    },
	    
	    isArgumentsLike : function(o) {
	    	return (
                Reflect.isArrayLike(o) &&
                !Reflect.isArray(o) &&
                Reflect.isFunction(o.callee)
	    	);
	    }
	};
	
	return Reflect;

});
	
})(k90tools);